import { useAppConfig } from '@vben/hooks';
import { cloneDeep, isString } from '@vben/utils';

/**
 * 格式化文件路径
 * @param path 图片路径
 * @returns string
 */
export const formatFilePath = (path: string): string => {
  if (path === undefined || path === '' || !isString(path)) {
    console.warn('请传入正确的图片路径');
    return '';
  }
  if (path.startsWith('/www') || path.startsWith(':/')) {
    // 如果传入的字符串以 "/www" 或 ":/" 开头，则认为是物理路径，直接返回
    return path;
  }

  if (path.startsWith('http://') || path.startsWith('https://')) {
    // 如果传入的字符串以 "http://" 或 "https://" 开头，则认为是网址，直接返回
    return path;
  } else {
    const { baseURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
    if (path.startsWith('/upload')) {
      return baseURL + path;
    }
    // 否则，在字符串前添加 '/upload/'
    return `${baseURL}/upload/${path}`;
  }
};

interface ImageData {
  [key: string]: any; // 如果对象的属性名是动态的
}
/**
 * 格式化图片集
 * @param data 数据数组
 * @param imageField 图片字段名，默认为 'image'
 * @returns 格式化后的数组
 */
export const formatImagesList = (
  data: ImageData[],
  imageField: string = 'image',
): any[] => {
  if (!Array.isArray(data)) {
    console.warn('Invalid input: "data" must be an array.');
    return [];
  }

  const IMAGE_REGEX = /\.(?:jpg|jpeg|png|gif)$/i;

  return cloneDeep(data).map((item) => {
    if (item[imageField] && IMAGE_REGEX.test(item[imageField])) {
      return {
        ...item,
        [imageField]: formatFilePath(item[imageField]),
      };
    }
    return item;
  });
};
